/*
深拷贝
 */

const obj1={
	age:20,
	name:'xxx',
	address:{
		city:"beijing"
	},
	arr:['a','b','c']
}
const obj2=deepClone(obj1);
obj2.address.city='shanghai'
/**
 * @param {object} obj 要拷贝的对象
 * 步骤：
 * 1.判断值类型和引用类型
 * 2.注意判断数组还是对象
 * 3.递归 (核心)
 */
function deepClone(obj={}){
	if(typeof obj !=='object' || obj==null){
		// obj是null，或者不是对象或者数组，直接返回
		return obj
	}
	// 定义返回结果：
	let result
	// 判断是数组还是对象：
	if(obj instanceof Array){
		result=[]
	}else{
		result={}
	}
	// 无论对象和数组都可以用for in 遍历
	for (let k in obj){
		// 保证key不是原型上的属性：
		if(obj.hasOwnProperty(k)){
			// 递归：
			result[k]=deepClone(obj[k])
		}
	}
	// 返回结果：
	return result
}
// 流程:
// let result ={},先传入key,key是age,然后执行deepClone,当20传递过去以后因为不是obj，所以直接返回本身20，
// 同理 name,当进行到address的时候因为后面是一个对象，所以会再进入递归
